<?php
//error_reporting(0);
// 缓存目录
define("CACHE_DIR", __DIR__ . "/cache/");
define("CACHE_TIMEOUT", 600); 
// 缓存时间 5 分钟
// 确保缓存目录存在if (!file_exists(CACHE_DIR)) 
{    
    mkdir(CACHE_DIR, 0777, true);
    }
$id = isset($_GET['id']) ? $_GET['id'] : 'cctv1';
$n = [    
    'cctv1' => '608807420', //CCTV1综合    
    'cctv2' => '631780532', //CCTV2财*    
    'cctv3' => '624878271', //CCTV3综艺    
    'cctv4' => '631780421', //CCTV4中文国际    
    'cctv4a' => '608807416', //CCTV4美洲    
    'cctv4o' => '608807419', //CCTV4欧洲    
    'cctv5' => '641886683', //CCTV5体育    
    'cctv5p' => '641886773', //CCTV5+体育赛事    
    'cctv6' => '624878396', //CCTV6电影    
    'cctv7' => '673168121', //CCTV7国防军事    
    'cctv8' => '624878356', //CCTV8电视剧    
    'cctv9' => '673168140', //CCTV9纪录    
    'cctv10' => '624878405', //CCTV10科教    
    'cctv11' => '667987558', //CCTV11戏曲    
    'cctv12' => '673168185', //CCTV12社会与法    
    'cctv13' => '608807423', //CCTV13新闻    
    'cctv14' => '624878440', //CCTV14少儿    
    'cctv15' => '673168223', //CCTV15音乐    
    'cctv17' => '673168256', //CCTV17农业农村
    'fxzl' => '624878970', //CCTV发现之旅    
'lgs' => '884121956', //CCTV老故事    
'zxs' => '708869532', //CCTV中学生
'cgtn' => '609017205', //CGTN    
'cgtnjl' => '609006487', //CGTN纪录    
'cgtne' => '609006450', //CCTV西班牙语   
 'cgtnf' => '609006476', //CCTV法语    
'cgtna' => '609154345', //CCTV阿拉伯语    
'cgtnr' => '609006446', //CCTV俄语
    'dfws' => '651632648', //东方卫视   
 'cqws' => '738910914', //重庆卫视    
'jlws' => '738906889', //吉林卫视    
'lnws' => '630291707', //辽宁卫视    
'nmws' => '738911430', //内蒙古卫视    
'nxws' => '738910535', //宁夏卫视    
'gsws' => '738910997', //甘肃卫视    
'qhws' => '738898486', //青海卫视    
'sxws' => '738910838', //陕西卫视    
'sdws' => '738910366', //山东卫视    
'hnws' => '790187291', //河南卫视    
'hubws' => '738906825', //湖北卫视    
'hunws' => '635491149', //湖南卫视    
'jxws' => '783847495', //江西卫视    
'jsws' => '623899368', //江苏卫视    
'dnws' => '849116810', //东南卫视    
'hxws' => '849119120', //海峡卫视    
'gdws' => '608831231', //广东卫视    
'dwqws' => '608917627', //大湾区卫视    
'gxws' => '783844132', //广西卫视    'ynws' => '783846580', //云南卫视    'gzws' => '783845222', //贵州卫视    'xjws' => '738910476', //新疆卫视    'xzws' => '738910461', //西藏卫视    'hinws' => '738906860', //海南卫视
    'shdy' => '895358641', //四海钓鱼    'chcjt' => '644368373', //CHC家庭影院    'chcdz' => '644368714', //CHC动作电影
    'dfys' => '617290047', //东方影视    'shxwzh' => '651632657', //上海新闻综合    'dycj' => '608780988', //上海第一财经    'shjsrw' => '617289997', //上视纪实人文    'shics' => '618954688', //上海外语    'fztd' => '790188943', //法治天地    'jbty' => '796071336', //劲爆体育    'mlzq' => '796070308', //魅力足球    'ly' => '796070452', //乐游    'hxjc' => '790187880', //欢笑剧场    'qcxj' => '796071456', //七彩戏剧    'yxfy' => '790188417', //游戏风云
    'lttv' => '668225749', //临洮电视台
    'jscs' => '626064714', //江苏城市    'jszy' => '626065193', //江苏综艺    'jsys' => '626064697', //江苏影视    'jsggxw' => '626064693', //江苏公共新闻    'jsgj' => '626064674', //江苏国际    'jsjy' => '628008321', //江苏教育    'jstyxx' => '626064707', //江苏体育休闲    'ymkt' => '626064703', //优漫卡通
    'njxwzh' => '838109047', //南京新闻综合    'njkj' => '838153729', //南京教科    'njsb' => '838151753', //南京十八
    'haxwzh' => '639731826', //淮安新闻综合    'lygxwzh' => '639731715', //连云港新闻综合    'szxwzh' => '639731952', //苏州新闻综合    'tzxwzh' => '639731818', //泰州新闻综合    'sqxwzh' => '639731832', //宿迁新闻综合    'xzxwzh' => '639731747', //徐州新闻综合
    'gdys' => '614961829', //广东影视    'jjkt' => '614952364', //嘉佳卡通
    '24hyzb' => '895932793', //24小时亚洲杯频道    'cbajd' => '788813182', //CBA经典    'gdjys' => '631354620', //掼蛋精英赛    'gqdp' => '629943678', //高清大片    'hpjxss' => '780290695', //和平精英赛事    'hslbt' => '713600957', //红色轮播台    'jddhdjh' => '629942219', //经典动画大集合    'jdxgdy' => '625703337', //经典香港电影    'jsdp' => '617432318', //军事迷必看大片    'hyytzqy' => '707671890', //华语乐坛最强音    'mg24hty' => '654102378', //咪咕24小时体育台    'nbajd' => '788815380', //NBA经典    'ozzqfy' => '788816794', //欧洲足球风云    'qmpp' => '788818045', //全民乒乓    'sszjd' => '646596895', //赛事最经典    'ttmlh' => '629943305', //体坛名栏汇    'ufcgdjx' => '788818804', //UFC格斗精选    'wdlsjd' => '780288994', //五大联赛经典    'jsjc' => '713591450', //金色剧场    'xczx' => '713589837', //乡村振兴    'xfzgn' => '617432318', //幸福中国年    'xpfyt' => '619495952', //新片放映厅    'jpjc' => '615810094', //精品剧场    'yxlmss' => '780286989', //英雄联盟赛事    'zjlxc' => '625133682', //周杰伦现场    'zqzyp' => '629942228', //最强综艺趴
    'xmpd' => '609158151', //熊猫01高清    'xm1' => '608933610', //熊猫1    'xm2' => '608933640', //熊猫2    'xm3' => '608934619', //熊猫3    'xm4' => '608934721', //熊猫4    'xm5' => '608935104', //熊猫5    'xm6' => '608935797', //熊猫6    'xm7' => '609169286', //熊猫7    'xm8' => '609169287', //熊猫8    'xm9' => '609169226', //熊猫9    'xm10' => '609169285', //熊猫10];
if (!isset($n[$id])) {    die("无效的 ID");}
$cacheFile = CACHE_DIR . "cache_" . $id . ".json";
// **Step 1: 先检查缓存**if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < CACHE_TIMEOUT) {    $cacheData = json_decode(file_get_contents($cacheFile), true);    if (!empty($cacheData['url'])) {        header("Content-Type: application/vnd.apple.mpegURL");        header("Location: " . $cacheData['url']);        exit;    }}
// **Step 2: 请求 API**function generateRandomString($length = 32) {    return substr(str_shuffle('0123456789abcdef'), 0, $length);}
$clientId = md5(generateRandomString());$bstrURL = 'https://webapi.miguvideo.com/gateway/playurl/v3/play/playurl?contId=' . $n[$id] . '&rateType=3&clientId=' . $clientId . '&startPlay=true&xh265=false&chip=mgwww&channelId=0132_10010001005';
$d = date("YmdHis");
$headers = [    'Content-Type: application/json',    "Referer: https://www.miguvideo.com/",    'Origin: https://www.miguvideo.com',    'User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; Mi Note 2 Build/OPR1.170623.032)',    'Vtraceid:' . $clientId,    'Traceid:' . $clientId,    'Datafreshversion:' . $d,    'Dataversion:' . $d,];
$json = json_decode(get_data($bstrURL, $headers), true);
if (empty($json['body']['urlInfo']['url'])) {    die("API 请求失败");}
$live = $json['body']['urlInfo']['url'];$uas = parse_url($live);parse_str($uas["query"], $arr);$puData = str_split($arr['puData']);$ProgramID = str_split($n[$id]);$Program = str_split('yzwxcdwbgh');
$s = count($puData);$arr_key = [];for ($v = 0; $v < $s / 2; $v++) {    $arr_key[] = $puData[$s - $v - 1];    $arr_key[] = $puData[$v];    switch ($v) {        case 1:        case 2:        case 4:            $arr_key[] = arrkey($v);            break;        case 3:            $arr_key[] = $Program[$ProgramID[1]];            break;    }}$ddCalcu = join($arr_key);
function arrkey($v) {    $put = ['z', 'y', '0', 'z'];    return $put[$v - 1];}
$p = $live . "&ddCalcu=" . $ddCalcu . '&sv=10000&crossdomain=www&ct=www';
$playurl = get_data($p, $headers);
// **Step 3: 存入缓存**file_put_contents($cacheFile, json_encode(['url' => $playurl], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
// **Step 4: 返回 M3U8 地址**header("Content-Type: application/vnd.apple.mpegURL");header('Location: ' . $playurl);exit;
/*** 发送 GET 请求*/function get_data($url, $header) {    $ch = curl_init($url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    curl_setopt($ch, CURLOPT_TIMEOUT, 1);    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);    $data = curl_exec($ch);    curl_close($ch);    return $data;}
?>